<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>27.mixin混合模式使用技巧s</title>
</head>

<body>

</body>
<script>
  //关于mixin 的使用在原型章节已经讨论过，在class 使用也是相同的原理
  // JS不能实现多继承，如果要使用多个类的方法时可以使用mixin混合模式来完成。

  //  - mixin 类是一个包含许多供其它类使用的方法的类
  //  - mixin 类不用来继承做为其它类的父类
  //其他语言也有类似的操作比如php 语言中可以使用 trait 完成类似操作
  const Tool = {
    max (key) {
      return this.data.sort((a, b) => b[key] - a[key])[0];
    }
  };

  const Arr = {
    count(key) {
      return this.data.reduce((t,c)=>t+c[key],0);
    }
  }

  class Lesson {
    constructor(lessons) {
      this.lessons = lessons;
    }
    get data () {
      return this.lessons;
    }
  }

  Object.assign(Lesson.prototype, Tool,Arr);

  const data = [
    { name: "js", price: 100 ,click: 20},
    { name: "mysql", price: 212 , click: 30 },
    { name: "vue.js", price: 98 , click: 40 }
  ];
  let hd = new Lesson(data);
  console.log(hd.max("price"));
  console.log(hd.count("click"));
</script>

</html>